/**
 * 数字格式化工具
 * @description 提供统一的数字格式化功能，支持中文单位（亿、万）
 */

/**
 * 格式化数字（使用中文单位：亿、万）
 * @param {Number} num - 数字
 * @returns {String} 格式化后的字符串，保留2位小数
 * @example
 * formatNumber(100000000) // '1.00亿'
 * formatNumber(50000) // '5.00万'
 * formatNumber(1000) // '1000.00'
 */
export function formatNumber(num) {
  const parsedNum = parseFloat(num) || 0
  if (isNaN(parsedNum)) return '0.00'

  const absNum = Math.abs(parsedNum)

  // 1亿以上
  if (absNum >= 100000000) {
    return (parsedNum / 100000000).toFixed(2) + '亿'
  }
  // 1万以上
  else if (absNum >= 10000) {
    return (parsedNum / 10000).toFixed(2) + '万'
  }
  // 小于1万
  else {
    return parsedNum.toFixed(2)
  }
}

/**
 * 格式化价格（支持万单位）
 * @param {Number} price - 价格
 * @returns {String} 格式化后的字符串，保留2位小数
 * @example
 * formatPrice(50000) // '5.00万'
 * formatPrice(1000) // '1000.00'
 */
export function formatPrice(price) {
  const num = parseFloat(price) || 0
  if (num === 0) return '0.00'

  if (num >= 10000) {
    return `${(num / 10000).toFixed(2)}万`
  }
  return num.toFixed(2)
}

/**
 * 格式化货币（带$符号）
 * @param {Number} amount - 金额
 * @returns {String} 格式化后的字符串
 * @example
 * formatCurrency(100000000) // '$1亿'
 * formatCurrency(50000) // '$5万'
 * formatCurrency(1000) // '$1000'
 */
export function formatCurrency(amount) {
  const formatted = formatNumber(amount)
  return `$${formatted}`
}

/**
 * 格式化带符号的数字（用于盈亏显示）
 * @param {Number} num - 数字
 * @returns {String} 格式化后的字符串，包含+/-符号，保留2位小数
 * @example
 * formatSignedNumber(50000) // '+5.00万'
 * formatSignedNumber(-50000) // '-5.00万'
 * formatSignedNumber(0) // '0.00'
 */
export function formatSignedNumber(num) {
  const parsedNum = parseFloat(num) || 0
  const absNum = Math.abs(parsedNum)

  // 当为0时，不显示加号
  if (parsedNum === 0) {
    return '0.00'
  }

  const sign = parsedNum > 0 ? '+' : ''

  if (absNum >= 10000) {
    return `${sign}${(absNum / 10000).toFixed(2)}万`
  }
  return `${sign}${absNum.toFixed(2)}`
}

/**
 * 格式化带符号的货币（用于盈亏显示）
 * @param {Number} amount - 金额
 * @returns {String} 格式化后的字符串，包含$和+/-符号
 * @example
 * formatSignedCurrency(50000) // '+$5万'
 * formatSignedCurrency(-50000) // '-$5万'
 */
export function formatSignedCurrency(amount) {
  const formatted = formatSignedNumber(amount)
  return `$${formatted}`
}

/**
 * 格式化价值（支持亿、万单位）
 * @param {Number} value - 价值
 * @returns {String} 格式化后的字符串，包含$符号，保留2位小数
 * @example
 * formatValue(100000000) // '$1.00亿'
 * formatValue(50000) // '$5.00万'
 */
export function formatValue(value) {
  const num = parseFloat(value) || 0
  if (isNaN(num)) return '$0.00'

  if (num >= 100000000) {
    return `$${(num / 100000000).toFixed(2)}亿`
  } else if (num >= 10000) {
    return `$${(num / 10000).toFixed(2)}万`
  }
  return `$${num.toFixed(2)}`
}

/**
 * 格式化带符号的金额（用于资金费、盈亏显示）
 * @param {Number} amount - 金额
 * @returns {String} 格式化后的字符串，包含$和+/-符号，保留2位小数
 * @example
 * formatSignedAmount(50000) // '+$5.00万'
 * formatSignedAmount(-50000) // '-$5.00万'
 * formatSignedAmount(0) // '$0.00'
 */
export function formatSignedAmount(amount) {
  const num = parseFloat(amount) || 0
  if (isNaN(num)) return '$0.00'

  const absNum = Math.abs(num)

  // 当为0时，不显示加号
  if (num === 0) {
    return `$0.00`
  }

  const sign = num > 0 ? '+' : ''
  if (absNum >= 10000) {
    return `${sign}$${(absNum / 10000).toFixed(2)}万`
  }
  return `${sign}$${absNum.toFixed(2)}`
}

export default {
  formatNumber,
  formatPrice,
  formatCurrency,
  formatSignedNumber,
  formatSignedCurrency,
  formatValue,
  formatSignedAmount
}

